#pragma once

#ifdef REIGN_DESKTOP // Only for desktop apps
#include "HerzeleidPrecompiled.hxx"
#include "HerzeleidWindowSizeChangedEventArgs.hxx"
#include "HerzeleidVisibilityChangedEventArgs.hxx"
#include "HerzeleidWindowActivatedEventArgs.hxx"
#include "HerzeleidCoreWindowEventArgs.hxx"
#include "HerzeleidPointerEventArgs.hxx"
#include "HerzeleidKeyEventArgs.hxx"
#include "HerzeleidCoreWindow.hxx"
#include "HerzeleidCoreDispatcher.hxx"
#include "HerzeleidCoreApplication.hxx"
#include "HerzeleidCoreApplicationView.hxx"
#endif

#include "SehnsuchtDDSTextureLoader.hxx"
#include "SehnsuchtReaderWriter.hxx"
#include "SehnsuchtPrecompiled.hxx"
#include "SehnsuchtDirectXBase.hxx"
#include "SehnsuchtLoader.hxx"

#include "AppUtilTimer.hxx"

#ifdef GMLABWORK_9
#include "Scene.hxx"
#include "CameraModelView.hxx"
#include "SceneMeshContext.hxx"
#endif

namespace Demo
{
#ifdef REIGN_DESKTOP
	typedef HerzeleidAppModelCoreNamespaceImpl::IFrameworkViewSource IProvider; TinyTypeDecl(IProvider); 
	typedef HerzeleidAppModelCoreNamespaceImpl::IFrameworkView IView; TinyTypeDecl(IView); 
	typedef HerzeleidAppModelCoreNamespaceImpl::CoreApplication App; TinyTypeDecl(App); 
	typedef HerzeleidAppModelCoreNamespaceImpl::CoreApplicationView AppView; TinyTypeDecl(AppView); 
	typedef HerzeleidUICoreNamespaceImpl::CoreWindow AppWindow; TinyTypeDecl(AppWindow); 
	typedef HerzeleidTimingNamespaceImpl::TimerView TimerView; TinyTypeDecl(TimerView); 
	typedef HerzeleidTimingNamespaceImpl::Timer Timer; TinyTypeDecl(Timer); 
#define protectedprivate protected
#define refclass class
#define refnew new
#else
	typedef HerzeleidTimingNamespaceImpl::TimerView ^TimerViewPtr;
	typedef HerzeleidTimingNamespaceImpl::TimerView TimerView;
	typedef HerzeleidTimingNamespaceImpl::Timer ^TimerPtr;
	typedef HerzeleidTimingNamespaceImpl::Timer Timer;
	typedef Windows::ApplicationModel::Core::IFrameworkViewSource ^IProviderPtr;
	typedef Windows::ApplicationModel::Core::IFrameworkViewSource IProvider;
	typedef Windows::ApplicationModel::Core::IFrameworkView ^IViewPtr;
	typedef Windows::ApplicationModel::Core::IFrameworkView IView;
	typedef Windows::ApplicationModel::Core::CoreApplicationView ^AppViewPtr;
	typedef Windows::ApplicationModel::Core::CoreApplicationView AppView;
	typedef Windows::ApplicationModel::Core::CoreApplication App;
	typedef Windows::UI::Core::CoreWindow ^AppWindowPtr;
	typedef Windows::UI::Core::CoreWindow AppWindow;
#define protectedprivate protected private
#define refclass ref class
#define refnew ref new
#endif

	namespace Events
	{
#ifdef REIGN_DESKTOP // Desktop
		typedef HerzeleidFoundationNamespaceImpl::TypedEventHandler<Demo::AppWindow, HerzeleidUICoreNamespaceImpl::VisibilityChangedEventArgs> AppWindowVisiblityEventHandler;
		typedef HerzeleidFoundationNamespaceImpl::TypedEventHandler<Demo::AppWindow, HerzeleidUICoreNamespaceImpl::WindowActivatedEventArgs> AppWindowActivationEventHandler;
		typedef HerzeleidFoundationNamespaceImpl::TypedEventHandler<Demo::AppWindow, HerzeleidUICoreNamespaceImpl::WindowSizeChangedEventArgs> AppWindowSizingEventHandler;
		typedef HerzeleidFoundationNamespaceImpl::TypedEventHandler<Demo::AppWindow, HerzeleidUICoreNamespaceImpl::PointerEventArgs> AppWindowPointerEventHandler;
		typedef HerzeleidFoundationNamespaceImpl::TypedEventHandler<Demo::AppWindow, HerzeleidUICoreNamespaceImpl::CoreWindowEventArgs> AppWindowEventHandler;
		typedef HerzeleidUICoreNamespaceImpl::VisibilityChangedEventArgs AppWindowVisibilityEventArgs; TinyTypeDecl( AppWindowVisibilityEventArgs );
		typedef HerzeleidUICoreNamespaceImpl::WindowActivatedEventArgs AppWindowActivationEventArgs; TinyTypeDecl( AppWindowActivationEventArgs );
		typedef HerzeleidUICoreNamespaceImpl::WindowSizeChangedEventArgs AppWindowSizingEventArgs; TinyTypeDecl( AppWindowSizingEventArgs );
		typedef HerzeleidUICoreNamespaceImpl::PointerEventArgs AppWindowPointerEventArgs; TinyTypeDecl( AppWindowPointerEventArgs );
		typedef HerzeleidUICoreNamespaceImpl::CoreWindowEventArgs AppWindowEventArgs; TinyTypeDecl( AppWindowEventArgs );
		typedef HerzeleidUICoreNamespaceImpl::CoreProcessEventsOption AppWindowProcessEventsOption; TinyTypeDecl( AppWindowProcessEventsOption );
		typedef HerzeleidUICoreNamespaceImpl::CoreWindowActivationState AppWindowActivationState;
#else // Runtime
		typedef Windows::Foundation::TypedEventHandler<Windows::UI::Core::CoreWindow^, Windows::UI::Core::VisibilityChangedEventArgs^> AppWindowVisiblityEventHandler;
		typedef Windows::Foundation::TypedEventHandler<Windows::UI::Core::CoreWindow^, Windows::UI::Core::WindowActivatedEventArgs^> AppWindowActivationEventHandler;
		typedef Windows::Foundation::TypedEventHandler<Windows::UI::Core::CoreWindow^, Windows::UI::Core::WindowSizeChangedEventArgs^> AppWindowSizingEventHandler;
		typedef Windows::Foundation::TypedEventHandler<Windows::UI::Core::CoreWindow^, Windows::UI::Core::PointerEventArgs^> AppWindowPointerEventHandler;
		typedef Windows::Foundation::TypedEventHandler<Windows::UI::Core::CoreWindow^, Windows::UI::Core::CoreWindowEventArgs^> AppWindowEventHandler;
		typedef Windows::UI::Core::VisibilityChangedEventArgs ^AppWindowVisibilityEventArgsPtr;
		typedef Windows::UI::Core::VisibilityChangedEventArgs AppWindowVisibilityEventArgs;
		typedef Windows::UI::Core::WindowActivatedEventArgs ^AppWindowActivationEventArgsPtr;
		typedef Windows::UI::Core::WindowActivatedEventArgs AppWindowActivationEventArgs;
		typedef Windows::UI::Core::VisibilityChangedEventArgs ^AppWindowVisibilityEventArgsPtr;
		typedef Windows::UI::Core::VisibilityChangedEventArgs AppWindowVisibilityEventArgs;
		typedef Windows::UI::Core::WindowSizeChangedEventArgs ^AppWindowSizingEventArgsPtr;
		typedef Windows::UI::Core::WindowSizeChangedEventArgs AppWindowSizingEventArgs;
		typedef Windows::UI::Core::PointerEventArgs ^AppWindowPointerEventArgsPtr;
		typedef Windows::UI::Core::PointerEventArgs AppWindowPointerEventArgs;
		typedef Windows::UI::Core::CoreWindowEventArgs ^AppWindowEventArgsPtr;
		typedef Windows::UI::Core::CoreWindowEventArgs AppWindowEventArgs;
		typedef Windows::UI::Core::CoreProcessEventsOption AppWindowProcessEventsOption;
		typedef Windows::UI::Core::CoreWindowActivationState AppWindowActivationState;
#endif // All
	};
};